package com.topboya.linker.api;

import com.topboya.linker.model.response.ChangePsRespnse;
import com.topboya.linker.model.response.CheckPhoneResponse;
import com.topboya.linker.model.response.CompanyUserListReponse;
import com.topboya.linker.model.response.CreatOrgResponse;
import com.topboya.linker.model.response.CreateDocCustomerResponse;
import com.topboya.linker.model.response.CreateTaskReponse;
import com.topboya.linker.model.response.CustomerByIdResponse;
import com.topboya.linker.model.response.CustomerByOrgIdAndNewlyCusListResopnse;
import com.topboya.linker.model.response.CustomerByOrgIdResponse;
import com.topboya.linker.model.response.DayByYearMothResponse;
import com.topboya.linker.model.response.DeleteTaskResponse;
import com.topboya.linker.model.response.DeptUserResponse;
import com.topboya.linker.model.response.DictByKeyResponse;
import com.topboya.linker.model.response.DictionaryResponse;
import com.topboya.linker.model.response.FeekbackReponse;
import com.topboya.linker.model.response.FileBytaskIdAndProductIdReponse;
import com.topboya.linker.model.response.FileLabelResponse;
import com.topboya.linker.model.response.FollowUserByOfficeResponse;
import com.topboya.linker.model.response.FollowUserLateResponse;
import com.topboya.linker.model.response.HomeListResponse;
import com.topboya.linker.model.response.LatelyDataResponse;
import com.topboya.linker.model.response.MiniSignInResponse;
import com.topboya.linker.model.response.MiniSignOutResopnse;
import com.topboya.linker.model.response.MyNoticeListResponse;
import com.topboya.linker.model.response.NewlyOrgListResponse;
import com.topboya.linker.model.response.OrganizationResopnse;
import com.topboya.linker.model.response.ProductInforListReponse;
import com.topboya.linker.model.response.SelectFileResponse;
import com.topboya.linker.model.response.TaskFileResponse;
import com.topboya.linker.model.response.TaskProductResponse;
import com.topboya.linker.model.response.TaskResponse;
import com.topboya.linker.model.response.TencentLocationResponse;
import com.topboya.linker.model.response.TitleDictResopnse;
import com.topboya.linker.model.response.UpFileResponse;
import com.topboya.linker.model.response.UserDataResponse;
import com.topboya.linker.model.response.VisitTypeResponse;
import com.topboya.linker.model.response.UpdateTaskBackResponse;

import okhttp3.MultipartBody;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Query;
import rx.Observable;

/**
 * @创建者 CSDN_LQR
 * @描述 server端api
 */
public interface MyApi {

     String BASE_URL = "https://otc.topboya.com/linker/api/";

//     字典查询接口后面合成一个接口，只是参数不同

    //1、用户登录
    @FormUrlEncoded
    @POST("authorize")
    Observable<CheckPhoneResponse> authorize( @Field("loginName") String loginName, @Field("password") String password,@Field("loginTermType") String loginTermType, @Field("captcha") String captcha );

    //2、查询客户信息

    @GET("organize/getOrgList")
    Observable<OrganizationResopnse> getOrgList(@Query("pageNo") String pageNo,@Query("orgName") String orgName);
   //3 我的设置里面请求终端接口，未审核和审核过得，和上面那个是同一个接口，后面在整合
   @GET("organize/getOrgList")
   Observable<OrganizationResopnse> getOrgListMy(@Query("pageNo") String pageNo,@Query("orgName") String orgName, @Query("delType")String delType);

    //3、医院ID查询科室人员
    @GET("customer/getCustomerByOrgId")
    Observable<CustomerByOrgIdResponse> getCustomerByOrgId(@Query("orgId") String orgId);

    //3、数据字典查询科室
    @GET("utils/getDictByKey")
    Observable<DictByKeyResponse> getDictByKey(@Query("type") String type);

    //3、数据字典查询职称
    @GET("utils/getDictByKey")
    Observable<TitleDictResopnse> getTitleByKey(@Query("type") String type);

    //3、创建医生客户
    @FormUrlEncoded
    @POST("customer/createDoctorCustomer")
    Observable<CreateDocCustomerResponse> createDoctorCustomer(@Field("orgId")String orgId , @Field("id") String id ,@Field("cusName")String cusName, @Field("phone") String phone, @Field("department") String department, @Field("posit") String posit, @Field("workExperience")String workExperience);

    //3、数据字典查询终端名称
    @GET("utils/getDictByKey")
    Observable<DictionaryResponse> getOrgTypeFromDic(@Query("type") String type);

    //3、数据字典查询医院等级
    @GET("utils/getDictByKey")
    Observable<DictionaryResponse> getHosLevelFromDic(@Query("type") String type);

    //3、数据字典查询任务类型
    @GET("utils/getDictByKey")
    Observable<VisitTypeResponse> getVisitType(@Query("type") String type);

    //3、腾讯查询地图（平台逆地址查询，参数 经纬度）
    @GET("utils/getInverseAddressList")
    Observable<TencentLocationResponse> getInverseAddressList(@Query("location") String location, @Query("getPoi") String getPoi);

//   上传文件
    @Multipart
    @POST("utils/uploadEnclosure")
    Observable<UpFileResponse> uploadFile(@Part MultipartBody.Part file);

    @FormUrlEncoded
    @POST("organize/creatOrg")
    Observable<CreatOrgResponse> creatOrg(@Field("orgName") String orgName, @Field("orgAddress") String orgAddress, @Field("orgType") String orgType, @Field("lat") String lat, @Field("lon") String lon, @Field("addressJson") String addressJson, @Field("hosLevel") String hosLevel, @Field("orgAreaId") String orgAreaId);


    @GET("product/getProductInforList")
    Observable<ProductInforListReponse> getProductInforList(@Query("pageNo") String pageNo ,@Query("productName") String productName,@Query("extendFlag")String extendFlag);

    @GET("product/getLatelyData")
    Observable<LatelyDataResponse> getLatelyData();


//    获取一个月中存在任务的日期
    @GET("task/getDayByYearMoth")
    Observable<DayByYearMothResponse> getDayByYearMoth(@Query("startTime") String startTime);

//  随访人，查询最近的随访人
    @GET("task/getFollowUser")
    Observable<FollowUserLateResponse> getFollowUser(@Query("type") String type);

//  随访人，根据部门id查询同部门人员
    @GET("task/getFollowUserByOffice")
    Observable<FollowUserByOfficeResponse> getFollowUserByOffice(@Query("officeId") String officeId);

    @GET("tree/getDeptUserList")
    Observable<DeptUserResponse> getDeptUserList();

    @GET("otc/home/getHomeList")
    Observable<HomeListResponse> getHomeList(@Query("taskType") String taskType, @Query("userIdJson") String userIdJson, @Query("startTime") String startTime, @Query("signOutLon") String signOutLon, @Query("signOutLat")String signOutLat, @Query("pageSize")String pageSize, @Query("pageNo") String pageNo);

    @GET("product/getProductFileList")
    Observable<SelectFileResponse> getProductFileList(@Query("productId") String productId,@Query("fileType") String fileType);

    @FormUrlEncoded
    @POST("task/createTask")
    Observable<CreateTaskReponse> createTask(@Field("orgId")String orgId , @Field("orgName") String orgName,@Field("createDate") String createDate, @Field("timeUse") String timeUse, @Field("startTime") String startTime, @Field("endTime") String endTime,@Field("cusList") String cusList, @Field("followName") String followName, @Field("followId") String followId, @Field("remarks") String remarks , @Field("Mflage") String Mflage );

    @FormUrlEncoded
    @POST("task/deleteTask")
    Observable<DeleteTaskResponse> deleteTask(@Field("id")String id);

//   签到接口
    @FormUrlEncoded
    @POST("SignInOrOut/miniSignIn")
    Observable<MiniSignInResponse> miniSignIn(@Field("lat")String lat,@Field("lon")String lon,@Field("actLat")String actLat,@Field("actLon")String actLon ,@Field("operaId")String operaId);

    //3、查询反馈任务字典
    @GET("utils/getDictByKey")
    Observable<FeekbackReponse> getFeekbackLable(@Query("type") String type);

   //任务反馈接口
    @FormUrlEncoded
    @POST("task/updateTaskBack")
    Observable<UpdateTaskBackResponse> updateTaskBack(@Field("sumUp")String sumUp, @Field("feedbackId")String feedbackId, @Field("Id")String Id, @Field("signOutLat")String signOutLat, @Field("signOutLon")String signOutLon);

    //  签出接口
    @FormUrlEncoded
    @POST("SignInOrOut/miniSignOut")
    Observable<MiniSignOutResopnse> miniSignOut(@Field("id")String id, @Field("operaId")String operaId, @Field("signOutLat")String signOutLat, @Field("signOutLon")String signOutLon);

//   返回最近10条的数据，和返回组织是一样的，所以bean和请求组织用一样的
    @GET("organize/getNewlyOrgList")
    Observable<NewlyOrgListResponse> getNewlyOrgList();

//   获取最近拜访的医生对象
    @GET("customer/getCustomerByOrgIdAndNewlyCusList")
    Observable<CustomerByOrgIdAndNewlyCusListResopnse> getCustomerByOrgIdAndNewlyCusList(@Query("orgId") String orgId);


    //   获取整个公司结构树，随访人需要用到
    @GET("sys/getDeptUserList")
    Observable<CompanyUserListReponse> getCompanyUserList();

    //3、数据字典查询科室
    @GET("utils/getDictByKey")
    Observable<FileLabelResponse> getFilelableByDicKey(@Query("type") String type);

//    查询某一任务下面的产品信息
    @GET("task/getTaskProductList")
    Observable<TaskProductResponse> getTaskProductList(@Query("id") String id);

    @GET("task/getTaskFile")
    Observable<TaskFileResponse> getTaskFile(@Query("id") String id);

    @GET("task/getFeekPruductFileBytaskIdAndProductId")
    Observable<FileBytaskIdAndProductIdReponse> getFeekPruductFileBytaskIdAndProductId(@Query("taskId") String taskId, @Query("productId") String  productId);

    @GET("task/getTask")
    Observable<TaskResponse> getTask(@Query("id") String id);

    @GET("notice/getMyNoticeList")
    Observable<MyNoticeListResponse> getMyNoticeList( @Query("pageNo")String pageNo);

    @GET("notice/getNoticeList")
    Observable<MyNoticeListResponse> getNoticeList(@Query("pageNo")String pageNo);

     //  查询具体客户信息
    @GET("customer/getCustomerById")
    Observable<CustomerByIdResponse> getCustomerById(@Query("id")String id);


     //  修改用户密码
     @FormUrlEncoded
    @POST("utils/modifyPassWord")
    Observable<ChangePsRespnse> modifyPassWord(@Field("oldPassword") String oldPassword,@Field("newPassword")String newPassword);

    //  查询客户信息
    @GET("sys/getUserData")
    Observable<UserDataResponse> getUserData();

}
